export const pageSize = {
	data() {
		return {
			list: [], //数据列表
			status: 'loadmore', //是否显示列表尾部提示
			method_name: '', //请求名
			page: 1, //页码
			page_name: 'page', //页码参数名
			page_size: 'limit', //页数
			page_size_num: 10, //页数参数名
			query: {}, //请求参数
			total: 0, //总数
			totle_name: 'data.total', //总数参数名
			objname: 'data.data', //参数名
			loop: false, //是否循环展示
			iscart: false, //购物车添加参数
		}
	},

	onPullDownRefresh() { //下拉刷新
		// this.list = [];
		this.resetlist();
		setTimeout(() => {
			uni.stopPullDownRefresh();
		}, 1000)
	},
	onReachBottom() { //上拉加载
		this.addlist(true);
	},
	onHide() {
		this.page = 1
	},
	methods: {
		getList(e) {
			if (e) { //上拉加载是调用
				this.status = 'loading';
			} else { //表示第一次调用 
				this.page = 1
				this.status = 'loadmore'
				this.list = [];
			}

			this.$api[this.method_name]({
				...{
					[this.page_name]: this.page,
					[this.page_size]: this.page_size_num
				},
				...this.query
			}).then(res => {
				//如果请求的列表为空，则显示【列表尾部提示】
				console.log(res);
				if (res.code == this.status_code) {
					let paths = this.objname.split('.'); //动态获取对象属性
					let info = res
					while (paths.length > 0) {
						info = info[paths.shift()]
					}

					if (this.iscart) {
						info.map(item => {
							item.flag = false
						})
					}

					if (e) { //判断是否我上拉加载
						this.list = this.list.concat(info)
					} else {
						//如果请求的列表不为空，则拼接数组到list中
						this.list = info
					}
					this.total = res
					let total_nom = this.totle_name.split('.'); //动态获取对象属性
					while (total_nom.length > 0) {
						this.total = this.total[total_nom.shift()]
					}
					// console.log(this.total, '==123');
					if (info.length == 0) {
						if (e) {
							this.status = 'nomore'
						}
						return;
					}

					if (this.list.length === this.total) {
						this.status = 'loading';
					}
					this.status = 'loadmore';
				}
			})
		},
		getNextPage(index) { //下一页数据
			this.$api[this.method_name]({
				...{
					[this.page_name]: this.page + 1,
					[this.page_size]: this.page_size_num
				},
				...this.query
			}).then(res => {
				//如果请求的列表为空，则显示【列表尾部提示】
				if (res.code == this.status_code) {
					this.list.splice(index, 1)
					let paths = this.objname.split('.'); //动态获取对象属性
					let info = res
					while (paths.length > 0) {
						info = info[paths.shift()]
					}

					this.total = res
					let total_nom = this.totle_name.split('.'); //动态获取对象属性
					while (total_nom.length > 0) {
						this.total = this.total[total_nom.shift()]
					}

					if (info.length == 0) {
						return;
					}
					if (this.iscart) {
						info.map(item => {
							item.flag = false
						})
					}
					this.list.push(info[0])
				}
			})
		},
		del_list(index) { //删除数据
			this.getNextPage(index)
		},

		addlist(e) {
			//上拉之前,判断总条数是否等于实际总条数，如果相等，就显示【列表尾部提示】，如果不相等,页码+1
			if (this.list.length < this.total) {
				this.page++
				this.getList(e);
			} else {
				if (this.loop) {
					this.page = 1
					this.getList(e);
				} else {
					this.status = 'nomore';
				}
			}
		},
		resetlist() {
			//下拉刷新，将当前页数重置为1，清空列表
			this.page = 1;
			// this.list = [];
			this.getList();
		}
	}
}

/*
功能：
	1.分页上拉加载 
	2.多分页删除的时候优化体验，加载下一页数据
	3.下拉刷新列表数据

使用：
	import { pageSize } from '@/components/minxins.js' //引入minxins
	
	mixins: [pageSize],
	
	list: [], //数据列表
	
	this.method_name = 'getUserAddress' //获取数据的方法
	
	this.query = {} //除了page外需要传递的参数
	
	this.getList();//获取数据的方法
	
	this.del_list(index) // index删除的是哪一项的下标 这个方法是把当前数据这一项删除 把下一页的数据补充一条到当前数据最后
							并且再次获取下一页数据 在调用删除方法成功之后的回调中调用
							
	for (let i = this.list.length - 1; i >= 0; i--) { //多删
				if (this.list[i].flag) {
					// console.log(i);
					this.del_list(i)
				}
			}
							
	<pullUp :status='status'></pullUp>						
							
*/